Today, components, controls, forms, or applications for data visualization are customarily developed with imperative languages or models. Imperative languages generally describe procedures or state changes, usually in the form of an algorithm. For example, procedural programming languages are a common way to imperatively describe program logic. Ultimately, imperative models generally result in monolithic program logic that on one hand is difficult to modify, yet on the other hand must specify all features and behaviors in advance, which often makes modification necessary since it is difficult to predict in advance all the features a customer or user might desire. By the same token, imperative models that are difficult to modify are therefore difficult to customize. Hence, reusability of the features included in applications generally suffers as many of those same features will need to be developed from scratch even when only a slight modification is needed given the difficulty associated with understanding another developer's previous work.
Moreover, especially in the business application arena, the general release of an application or tool often differs from the original development in a number of ways, at times quite substantially. Typically, this is a result of additions or modifications made by partners or even in some situations by large customers who desire to tailor the application to individual needs. As such, later upgrades to the application must account for these changes or the upgrade might not be compatible.